home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
admin
/
makedev-.000
/
makedev-
/
MAKEDEV-2.2
/
MAKEDEV
next >
Wrap
Text File
|
1995-05-21
|
14KB
|
588 lines
#! /bin/sh -
RCSID='$Id: MAKEDEV 2.2 1995/05/21 17:55:14 alfie Exp $'
#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
# Customisation:
# The devices fall into various classes. This section contains the mapping
# from a class name into a group name and permission.
# You will almost certainly need to edit the group name to match your
# system, and you may change the permissions to suit your preference. These
# lines _must_ be of the format "user group perm".
public=" root system 666"
system=" root system 660"
kmem=" root kmem 660"
tty=" root tty 666"
cons=" root tty 622" # 622 for console?
vcs=" root system 600"
dialout=" root uucp 660"
mouse=" root system 666"
printer=" root daemon 660"
floppy=" root floppy 660"
disk=" root disk 660"
scsi=" root system 600"
cdrom=" root disk 660"
tape=" root disk 660"
audio=" root system 666"
ibcs2=" root system 666"
scanner=" root system 666"
MAXVT=8
#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
procfs=/proc
opt_v=
opt_d=
opt_n=
while [ $# -ge 1 ]
do
case $1 in
--) shift; break ;;
-v) shift; opt_v=1 ;;
-d) shift; opt_d=1 ;;
-n) shift; opt_n=1; opt_v=1 ;;
-V) shift; opt_V=1 ;;
-*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;;
*) break ;;
esac
done
if [ "$opt_V" ]
then
echo "$RCSID"
exit 0
fi
opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}"
#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
makedev () { # usage: makedev name [bcu] major minor owner group mode
if [ "$opt_v" ]
then if [ "$opt_d" ]
then echo "delete $1"
else echo "create $1 $2 $3 $4 $5:$6 $7"
fi
fi
if [ ! "$opt_n" ]
then if [ "$opt_d" ]
then
rm -f $1
else
mknod $1- $2 $3 $4 &&
chown $5:$6 $1- &&
chmod $7 $1- &&
mv $1- $1
fi
fi
}
symlink () { # usage: symlink name target
if [ "$opt_v" ]
then if [ "$opt_d" ]
then echo "delete $1"
else echo "create $1 -> $2"
fi
fi
[ ! "$opt_n" ] && rm -f $1 &&
[ ! "$opt_d" ] && ln -s $2 $1
}
#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
# For bash and ksh, we can use faster builtin routines to do manipulation,
# otherwise (ash) fall back to slower method using `expr'.
# The extra level of indirection using `eval' is necessary a) for ksh, and
# b) to get past ash.
if [ "$RANDOM" != "$RANDOM" ]
then
math () {
eval echo "\$(($*))"
}
index () { # index string c
eval "I=\${1%$2*}"
eval echo "\${#I}"
}
suffix () {
eval echo "\${1#$2}"
}
strip () {
eval echo "\${1% $2 *} \${1#* $2 }"
}
else
math () {
expr "$@"
}
index () { # index string c
expr $1 : ".*$2" - 1
}
suffix () {
expr "$1" : "$2\(.*\)"
}
strip () {
echo "[$1][$2]" >&2
echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`"
}
fi
#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#
devices=
if [ ! -f $procfs/devices ]
then
echo "$0: warning: can't read $procfs/devices" >&2
else
exec 3<$procfs/devices
while read major device <&3
do
case "$major" in
Character|Block|'')
;;
*)
eval "major_$device=$major"
devices="$devices $device"
;;
esac
done
exec 3<&-
fi
Major () {
device=$2
if [ "$opt_d" ]
then
echo -1 # don't care
else
eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}}
fi
}
cvt () {
while [ $# -ne 0 ]
do
case "$1" in
mem|tty|ttyp|cua|cub) ;;
hd|ide0) echo hda hdb ;;
ide1) echo hdc hdd ;;
sd) echo sda sdb ;;
sr) echo scd0 ;;
st) echo st0 ;;
xd) echo xda xdb ;;
fd) echo fd0 fd1 ;;
lp) echo lp ;;
mt) echo ftape ;;
loop) echo loop ;;
md) echo md ;;
ibcs2) echo ibcs2 ;;
tpqic02) echo qic ;;
sound) echo audio ;;
logiscan) echo logiscan ;;
ac4096) echo ac4096 ;;
hw) echo helloworld ;;
sbpcd | sbpcd[123]) echo $1 ;;
Joystick) echo js ;;
apm_bios) echo apm ;;
dcf) echo dcf ;;
aztcd) echo aztcd ;;
pcmcia) ;; # taken care of by its own driver
ttyC) echo cyclades ;;
vcs) ;;
*) echo "$0: don't know what \"$1\" is" >&2 ;;
esac
shift
done
}
for arg
do
case $arg in
generic)
$0 $opts std
$0 $opts fd
$0 $opts fd0 fd1
$0 $opts hda hdb
$0 $opts xda xdb
$0 $opts sda sdb
$0 $opts ptyp ptyq ptyr ptys
$0 $opts console
$0 $opts ttyS0 ttyS1 ttyS2 ttyS3
$0 $opts busmice
$0 $opts lp
$0 $opts par
;;
local)
$0.local $opts
;;
std)
makedev mem c 1 1 $kmem
makedev kmem c 1 2 $kmem
makedev null c 1 3 $public
makedev port c 1 4 $kmem
makedev zero c 1 5 $public
symlink core $procfs/kcore
makedev full c 1 7 $public
makedev ram b 1 1 $disk
makedev tty c 5 0 $tty
;;
console)
major=`Major vcs` # not fatal
# console
makedev tty0 c 4 0 $cons
symlink console tty0
[ "$major" ] && makedev vcs0 c $major 0 $vcs
[ "$major" ] && makedev vcsa c $major 128 $vcs
# individual vts
line=1
while [ $line -le $MAXVT -a $line -le 63 ]
do
makedev tty$line c 4 $line $tty
[ "$major" ] && makedev vcs$line c $major $line $vcs
[ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs
line=`math $line + 1`
done
;;
tty[1-9]|tty[1-5][0-9]|tty[6][0-3])
line=`suffix $arg tty`
makedev tty$line c 4 $line $tty
;;
ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3])
line=`suffix $arg ttyS`
minor=`math 64 + $line`
makedev ttyS$line c 4 $minor $tty
makedev cua$line c 5 $minor $dialout
;;
pty[p-s])
# Currently limited to 64 master/slave pairs.
bank=`suffix $arg pty`
base=`index pqrs $bank`
base=`math $base \* 16`
for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f
do
j=`index 0123456789abcdef $i`
makedev pty$bank$i c 4 `math 128 + $base + $j` $tty
makedev tty$bank$i c 4 `math 192 + $base + $j` $tty
done
;;
cyclades)
major1=`Major ttyC` || continue
major2=`Major cub` || continue
for i in 0 1 2 3 4 5 6 7 # 8 9 10 11 12 13 14 15
do
makedev ttyC$i c $major1 `math 32 + $i` $tty
makedev cub$i c $major2 `math 32 + $i` $dialout
done
;;
lp)
major=`Major lp` || continue
makedev ${arg}0 c $major 0 $printer
makedev ${arg}1 c $major 1 $printer
makedev ${arg}2 c $major 2 $printer
;;
par)
major=`Major lp` || continue
makedev ${arg}0 c $major 0 $printer
makedev ${arg}1 c $major 1 $printer
makedev ${arg}2 c $major 2 $printer
;;
busmice)
major=`Major mouse 10` || continue
makedev logimouse c $major 0 $mouse
makedev psmouse c $major 1 $mouse
makedev msmouse c $major 2 $mouse
makedev atimouse c $major 3 $mouse
makedev jmouse c $major 4 $mouse
;;
js)
major=`Major Joystick` || continue
makedev js0 c $major 0 $mouse
makedev js1 c $major 1 $mouse
;;
fd[0-7])
major=`Major fd 2` || continue
base=`suffix $arg fd`
if [ $base -ge 4 ]
then
base=`math $base + 124`
fi
makedev ${arg} b $major $base $floppy
makedev ${arg}d360 b $major `math $base + 4` $floppy
makedev ${arg}h1200 b $major `math $base + 8` $floppy
makedev ${arg}D360 b $major `math $base + 12` $floppy
makedev ${arg}D720 b $major `math $base + 16` $floppy
makedev ${arg}h360 b $major `math $base + 20` $floppy
makedev ${arg}h720 b $major `math $base + 24` $floppy
makedev ${arg}H1440 b $major `math $base + 28` $floppy
makedev ${arg}E2880 b $major `math $base + 32` $floppy
makedev ${arg}CompaQ b $major `math $base + 36` $floppy
symlink ${arg}H360 ${arg}D360
symlink ${arg}H720 ${arg}D720
makedev ${arg}h1440 b $major `math $base + 40` $floppy
makedev ${arg}H1680 b $major `math $base + 44` $floppy
makedev ${arg}h410 b $major `math $base + 48` $floppy
makedev ${arg}H820 b $major `math $base + 52` $floppy
makedev ${arg}h1476 b $major `math $base + 56` $floppy
makedev ${arg}H1722 b $major `math $base + 60` $floppy
makedev ${arg}h420 b $major `math $base + 64` $floppy
makedev ${arg}H830 b $major `math $base + 68` $floppy
makedev ${arg}h1494 b $major `math $base + 72` $floppy
makedev ${arg}H1743 b $major `math $base + 76` $floppy
makedev ${arg}h880 b $major `math $base + 80` $floppy
makedev ${arg}D1040 b $major `math $base + 84` $floppy
makedev ${arg}D1120 b $major `math $base + 88` $floppy
makedev ${arg}h1600 b $major `math $base + 92` $floppy
makedev ${arg}H1760 b $major `math $base + 96` $floppy
makedev ${arg}H1920 b $major `math $base + 100` $floppy
makedev ${arg}E3200 b $major `math $base + 104` $floppy
makedev ${arg}E3520 b $major `math $base + 108` $floppy
makedev ${arg}E3840 b $major `math $base + 112` $floppy
makedev ${arg}H1840 b $major `math $base + 116` $floppy
makedev ${arg}D800 b $major `math $base + 120` $floppy
makedev ${arg}H1600 b $major `math $base + 124` $floppy
;;
hd[a-b])
major=`Major ide0` || major=`Major hd 3` || continue
unit=`suffix $arg hd`
base=`index ab $unit`
base=`math $base \* 64`
makedev hd$unit b $major $base $disk
for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
do
makedev hd$unit$part b $major `math $base + $part` $disk
done
;;
hd[c-d])
major=`Major ide1 22` || continue
unit=`suffix $arg hd`
base=`index cd $unit`
base=`math $base \* 64`
makedev hd$unit b $major $base $disk
for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
do
makedev hd$unit$part b $major `expr $base + $part` $disk
done
;;
xd[a-d])
major=`Major xd 13` || continue
unit=`suffix $arg xd`
base=`index abcd $unit`
base=`math $base \* 64`
makedev xd$unit b $major $base $disk
for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20
do
makedev xd$unit$part b $major `expr $base + $part` $disk
done
;;
sd[a-h])
major=`Major sd 8` || continue
unit=`suffix $arg sd`
base=`index abcdefgh $unit`
base=`math $base \* 16`
makedev sd$unit b $major $base $disk
for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15
do
minor=`expr $base + $part`
makedev sd$unit$part b $major $minor $disk
done
;;
loop)
major=`Major loop` || continue
for part in 0 1 2 3 4 5 6 7
do
makedev loop$part b $major $part $disk
done
;;
md)
major=`Major md` || continue
for part in 0 1 2 3
do
makedev md$part b $major $part $disk
done
;;
st[0-7])
major=`Major st 9`
unit=`suffix $arg st`
makedev st$unit c $major $unit $tape
makedev nst$unit c $major `math 128 + $unit` $tape
;;
qic)
major=`Major tpqic02 12`
makedev rmt8 c $major 6 $tape
makedev rmt16 c $major 8 $tape
makedev tape-d c $major 136 $tape
makedev tape-reset c $major 255 $tape
;;
ftape)
major=`Major mt 27` || continue
for unit in 0 1 2 3
do
makedev rft$unit c $major $unit $tape
makedev nrft$unit c $major `math $unit + 4` $tape
done
symlink ftape rft0
symlink nftape nrft0
;;
scd[0-7])
major=`Major sr 11` || continue
unit=`suffix $arg scd`
makedev scd$unit b $major $unit $cdrom
;;
sonycd)
major=`Major cdu31a` || continue
makedev $arg b $major 0 $cdrom
;;
mcd)
major=`Major mcd 23` || continue
makedev $arg b $major 0 $cdrom
;;
cdu535)
makedev $arg b 24 0 $cdrom
;;
lmscd)
makedev $arg b 24 0 $cdrom
;;
sbpcd|sbpcd[123])
major=`Major $arg` || continue
base=`suffix ${arg}0 sbpcd`
# base=`expr ${arg}0 : "sbpcd\(.\)"`
for minor in 0 1 2 3
do
# XXX
unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1`
makedev sbpcd$unit b $major $minor $cdrom
done
[ $arg = sbpcd ] && symlink $arg ${arg}0
;;
aztcd)
major=`Major $arg` || continue
makedev ${arg}0 b $major 0 $cdrom
;;
logiscan)
major=`Major logiscan` || continue
makedev $arg c $major 0 $scanner
;;
m105scan)
major=`Major m105` || continue
makedev $arg c $major 0 $scanner
;;
ac4096)
major=`Major ac4096` || continue
makedev $arg c $major 0 $scanner
;;
audio)
major=`Major sound 14`
makedev mixer c $major 0 $audio
makedev sequencer c $major 1 $audio
makedev midi00 c $major 2 $audio
makedev dsp c $major 3 $audio
makedev audio c $major 4 $audio
makedev sndstat c $major 6 $audio
# makedev sequencer2 c $major 8 $audio
makedev mixer1 c $major 16 $audio
# makedev patmgr0 c $major 17 $audio
makedev midi01 c $major 18 $audio
makedev dsp1 c $major 19 $audio
makedev audio1 c $major 20 $audio
# makedev patmgr1 c $major 33 $audio
makedev midi02 c $major 34 $audio
makedev midi03 c $major 50 $audio
;;
pcaudio)
major=`Major pcsp` || continue
makedev pcmixer c $major 0 $audio
makedev pcsp c $major 3 $audio
makedev pcaudio c $major 4 $audio
;;
sg)
major=`Major sg 21`
for unit in a b c d e f g h
do
minor=`index abcdefgh $unit`
# minor=`expr abcdefgh : ".*$unit" - 1`
makedev $arg$unit c $major $minor $scsi
done
;;
fd)
# not really devices, we use the /proc filesystem
symlink fd $procfs/self/fd
symlink stdin fd/0
symlink stdout fd/1
symlink stderr fd/2
;;
ibcs2)
major=`Major ibcs2` || continue
makedev socksys c $major 0 $ibcs2
symlink nfsd socksys
makedev spx c $major 1 $ibcs2
symlink X0R null
;;
apm)
major=`Major apm_bios` || continue
makedev $arg c $major 0 $system
;;
dcf)
major=`Major dcf` || continue
makedev $arg c $major 0 $system
;;
helloworld)
major=`Major hw` || continue
makedev helloworld c $major 0 $public
;;
update)
if [ ! "$devices" ]
then
echo "$0: don't appear to have any devices" >&2
continue
fi
if [ "$opt_d" ]
then
echo "$0: can't delete an update" >&2
continue
fi
create=
delete=
devs="$devices"
if [ -f DEVICES ]
then
exec 3<DEVICES
while read device major <&3
do
eval now=\$major_$device
if [ "$now" = "" ]
then
delete="$delete `cvt $device`"
continue
elif [ "$now" != $major ]
then
create="$create "`cvt $device`
fi
devs=`strip " $devs " $device`
# devs=`expr "$devs" : "\(.*\) $device"``expr "$devs" : ".* $device\(.*\)"`
done
exec 3<&-
fi
create="$create "`cvt $devs`
[ "$delete" != "" ] && $0 $opts -d $delete
[ "$create" != " " ] && $0 $opts $create
[ "$opt_n" ] && continue
for device in $devices
do
if [ "`cvt $device`" ]
then
eval echo $device \$major_$device
fi
done > DEVICES
;;
*)
echo "$0: don't know how to make device \"$arg\"" >&2
;;
esac
done
exit 0